D21_修正第二週作業、繼續第三週


Posted by Christy on 2021-05-10

改第二週作業

改第二週作業,把本地端改好以後,強制推上遠端,出現錯誤訊息:

fatal: The current branch week2 has no upstream branch.
To push the current branch and set the remote as upstream, use

接著我用 git push --set-upstream origin week2,出現第二個錯誤訊息:

 ! [rejected]        week2 -> week2 (non-fast-forward)
error: failed to push some refs to 'https://github.com/Lidemy/mentor-program-5th-LPGUEI.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

後來參考了 Git 文件跟 Google,最後用了 git push -f -u origin week2;因為開始第三週影片,裝了 eslint,改了三次才被認可

恩...好像有點複雜,但是真的是遇到問題才是了解 Git 的開始...我也不確定到底解決問題了沒 😱

跟 eslint 小公主初次見面,妳好妳好。


感謝助教的耐心,提點我作業六的缺失,把它改成下面的版本了:

function isValid(arr) {
  for(var i=0; i<arr.length; i++) {
    if (arr[i] <= 0) return 'invalid'
  }
  for(var i=2; i<arr.length; i++) {
    if (arr[i] !== arr[i-1] + arr[i-2]) return 'invalid'
  }
  return 'valid'
}

isValid([3, 5, 8, 13, 22, 35])

題目:
寫一個叫做 isValid 的函式,傳進一個叫做 arr 的陣列為參數,
判斷該陣列是否為費波那契數列(Fibonacci sequence)
(即陣列前兩項的和是否等於第三項)
如果是,則回傳 'valid';否或者陣列的數小於等於零,則回傳 'invalid'

感謝助教的提醒,這裡特別要注意的是:「這段程式碼真正執行的時候是當呼叫 arr.length 時才去看當下 arr.length 的值。」
所以其實下面的每個 6,應該寫成「檢查 i 是否 < arr.length」;也有可能在其他情況下,arr.length 每次被拿掉一個元素,那長度就會變動了。

執行流程
  1. 把 [3, 5, 8, 13, 22, 35] 這個陣列傳進 isValid 這個函式裡面,總共有 6 個元素,陣列的長度為 6
  2. 執行第一行,i = 0,檢查 i 是否 < 6,是,繼續,開始第一圈迴圈
  3. 執行第二行,檢查陣列第一個元素是否 <= 0,但 3 > 0,否,第一圈結束,回到上一行
  4. 執行第一行,i ++,開始第二圈,i = 1,檢查 i 是否 < 6,是,繼續往下
  5. 執行第二行,檢查陣列第二個元素是否 <= 0,但 5 > 0,否,第二圈結束,回到上一行
  6. 執行第一行,i ++,開始第三圈,i = 2,檢查 i 是否 < 6,是,繼續往下
  7. 執行第二行,檢查陣列第三個元素是否 <= 0,但 8 > 0,否,第三圈結束,回到上一行
  8. 執行第一行,i ++,開始第四圈,i = 3,檢查 i 是否 < 6,是,繼續往下
  9. 執行第二行,檢查陣列第四個元素是否 <= 0,但 13 > 0,否,第四圈結束,回到上一行
  10. 執行第一行,i ++,開始第五圈,i = 4,檢查 i 是否 < 6,是,繼續往下
  11. 執行第二行,檢查陣列第五個元素是否 <= 0,但 22 > 0,否,第五圈結束,回到上一行
  12. 執行第一行,i ++,開始第六圈,i = 5,檢查 i 是否 < 6,是,繼續往下
  13. 執行第二行,檢查陣列第六個元素是否 <= 0,但 35 > 0,否,第六圈結束,回到上一行
  14. 執行第一行,i ++,開始第七圈,i = 6,檢查 i 是否 < 6,否,結束迴圈,繼續往下一行執行
  15. 執行第二個 for 迴圈,i = 2,檢查 i 是否 < 6,是,開始第一圈
  16. 執行下一行,檢查陣列第三個元素 8 是否不等於陣列的第二個元素 5 加上陣列的第一個元素 3,否,第一圈結束,回到上一行
  17. i ++,開始第二圈,i = 3,檢查 i 是否 < 6,是,繼續往下
  18. 執行下一行,檢查陣列第四個元素 13 是否不等於陣列的第三個元素 8 加上陣列的第二個元素 5,否,第二圈結束,回到上一行
  19. i ++,開始第三圈,i = 4,檢查 i 是否 < 6,是,繼續往下
  20. 執行下一行,檢查陣列第五個元素 22 是否不等於陣列的第四個元素 13 加上陣列的第三個元素 8,是,回傳 'invalid',結束迴圈,結束函式。

LIOJ 1027 信用卡號驗證

  • 解題想法:因為連字號阻礙了運算規則,所以最好的方法應該是寫一個把連字號去掉的函式,接著再實作這一題會比較簡單。運算細節:卡號奇數位乘以二,如果大於十,該位數減去九,所有位數相加以及偶數位相加,這兩個相加的總和對十取餘數,整除則檢查碼為零;或者用 10 減去餘數就等於檢查碼。
  • 大方向想法:首先取得 lines 陣列第一位 -> lines[0],總和就等於奇數位加上偶數位。令 ans 為總和對 10 取餘數,如果 ans 不等於零,檢查碼就是 10 - ans;如果檢查碼不等於卡號最後一位,輸出 'INVALID';如果卡號第一位等於 5,輸出 ‘MASTER_CARD’,不然就輸出 ‘VISA’。
  • 寫出函式一:去掉連字號;函式二:偶數位相加;函式三:奇數位相加
var readline = require('readline');

var lines = []
var rl = readline.createInterface({
  input: process.stdin
});

rl.on('line', function (line) {
  lines.push(line)
});

rl.on('close', function() {
  solve(lines)
})

function solve(lines) {
    let input = removeDash(lines[0])
    let sum = evenDigitsCount(input) + oddDigitsCount(input)
    let ans = sum % 10
    if (ans !== 0) {
        ans = 10 - ans
    }
    if (ans !== Number(input[15])) {
        console.log('INVALID')
    } else {
        if (input[0] === '5') {
            console.log('MASTER_CARD')
        } else {
            console.log('VISA')
        }
    }
}

function removeDash(str) {
    let result = ''
    for(i = 0; i < str.length; i++) {
        if(str[i] >= 0 && str[i] <= 9) {
            result += str[i]
        }
    }
    return result
}

function evenDigitsCount(input) {
    let sum = 0
    for (a = 1; a <= 13; a+=2) {
        sum += Number(input[a])
    }
    return sum
}

function oddDigitsCount(input) {
    let sum = 0
    for (i = 0; i <= 15; i+=2) {
        let p = Number(input[i]) * 2
        if (p >= 10) {
            p = p - 9
        }
        sum += p
    }
    return sum
}









Related Posts

ROS SMACH 簡介

ROS SMACH 簡介

1731. The Number of Employees Which Report to Each Employee

1731. The Number of Employees Which Report to Each Employee

CS50 Tries

CS50 Tries


Comments